package com.framework.core.convert.impl;


import com.framework.core.convert.AbstractConverter;
import com.framework.core.utils.StrUtil;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期转换器
 * 
 * @author Looly
 *
 */
public class CalendarConverter extends AbstractConverter<Calendar> {

	/** 日期格式化 */
	private String format;

	/**
	 * 获取日期格式
	 * 
	 * @return 设置日期格式
	 */
	public String getFormat() {
		return format;
	}

	/**
	 * 设置日期格式
	 * 
	 * @param format 日期格式
	 */
	public void setFormat(String format) {
		this.format = format;
	}

	@Override
	protected Calendar convertInternal(Object value) {
		// Handle Date
		if (value instanceof Date) {
			Calendar instance = Calendar.getInstance();
			instance.setTime((Date)value);
			return instance;
		}

		// Handle Long
		if (value instanceof Long) {
			//此处使用自动拆装箱
			Calendar instance = Calendar.getInstance();
			instance.setTimeInMillis((Long)value);
			return instance;
		}

		final String valueStr = convertToStr(value);

		DateFormat dateFormat;
		if(StrUtil.isBlank(format)){
			dateFormat= new SimpleDateFormat("HH:mm:ss");
		}else {
			dateFormat= new SimpleDateFormat(format);
		}
		Date date = null;
		try {
			date = dateFormat.parse(valueStr);
			Calendar instance = Calendar.getInstance();
			instance.setTime(date);
			return instance;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		// TODO: 2018/5/30 空值处理
		return null;

	}

}
